home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / mui / bcc_src.lha / Parser / ParseOptions.cpp < prev    next >
C/C++ Source or Header  |  1998-03-15  |  2KB  |  97 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "ParseOptions.h"
  4. #include "Global.h"
  5.  
  6.  
  7. short ParseOptions::Start( void )
  8. {
  9.  char *fname;
  10.  FILE *fh;
  11.     
  12.     fname = "BCCOptions";
  13.     
  14.     if( fh = fopen( fname, "r" ) ) {
  15.         fclose( fh );
  16.     } else {
  17.         fname = "ENV:bcc/BCCOptions";
  18.     }
  19.     
  20.     if( !Load( fname ) ) return 0;
  21.     
  22.     while( 1 ) {
  23.     
  24.         if( Next() ) break;
  25.         
  26.         if( TokLen == 7 && !strncmp( "deftype", Tok, 7 ) ) {
  27.  
  28.             if( Next() ) break;
  29.             
  30.             if( TokLen != 3 ) {
  31.                 Error( 1 );
  32.                 break;
  33.             }
  34.             Prefs.deftype = Prefs.AddText( Tok, TokLen );
  35.  
  36.         } 
  37.  
  38.         if( TokLen == 6 && !strncmp( "incdir", Tok, 6 ) ) {
  39.  
  40.             if( Next() ) break;
  41.             
  42.             if( TokLen < 3 || *Tok != '"' || Tok[TokLen-1] != '"' ) {
  43.                 Error( 2 );
  44.                 break;
  45.             }
  46.             Prefs.incdir = Prefs.AddText( Tok+1, TokLen-2 );
  47.  
  48.         } 
  49.  
  50.         if( TokLen == 7 && !strncmp( "verbose", Tok, 7 ) ) Prefs.verbose = 1;
  51.         if( TokLen == 7 && !strncmp( "bclines", Tok, 7 ) ) Prefs.reallines = 1;
  52.         if( TokLen == 9 && !strncmp( "noversion", Tok, 9 ) ) Prefs.noversion = 1;
  53.         if( TokLen == 10 && !strncmp( "forcetrans", Tok, 10 ) ) Prefs.forcetrans = 1;
  54.         if( TokLen == 8 && !strncmp( "nosaveds", Tok, 8 ) ) Prefs.nosaveds = 1;
  55.  
  56.         if( TokLen == 7 && !strncmp( "tagbase", Tok, 7 ) ) {
  57.         
  58.             if( Next() ) break;
  59.             if( TokLen != 4 ) {
  60.                 Error( 3 );
  61.                 break;
  62.             }
  63.             
  64.             short i, f;
  65.             Prefs.tagbase = 0;
  66.             for( i = 0; i < 4; i++ ) {
  67.                 Prefs.tagbase <<= 4;
  68.                 f = Tok[i];
  69.                 if( f >= '0' && f <= '9' ) f -= '0';
  70.                 else {
  71.                     f &= 0xdf;
  72.                     f -= 'A' - 10;
  73.                 }
  74.                 if( f < 0 || f > 15 ) {
  75.                     Error( 3 );
  76.                     break;
  77.                 }
  78.                 Prefs.tagbase |= f;
  79.             }
  80.             
  81.         }
  82.  
  83.     }
  84.  
  85.     return 1;
  86.  
  87. }
  88.  
  89. static char *errtab[] = {
  90.     "Unknown error",
  91.     "Bad deftype string",
  92.     "Bad incdir parameter",
  93.     "<tagbase> should be four digit hex number"
  94. };
  95.  
  96. char **ParseOptions::ErrorStrings( void ) { return errtab; }
  97.